// Proxy 对象

// const person = {
//     name : 'zce',
//     age: 20
// }

// //第一个参数为代理目标对象  第二个参数为代理处理对象
// const personProxy = new Proxy(person, {
//     // 监视处理对象的访问
//     // 第一个参数为监听对象  第二个为访问的属性
//     get (target, property) {
//         return property in  target ? target[property] : 'default'
//         // console.log(target, property);
//         // return 100
//     },
//     // 监视设置属性的过程
//     // 第一个参数为监听对象  第二个为写入名称 第三个为写入值
//     set (target, property, value) {
//         if (property === 'age') {
//             if(!Number.isInteger(value)) {
//                 throw new TypeError(`${value} is not an int`)
//             }
//         }
//         target[property] = value
//         // console.log(target, property, value);
//     }
// })

// personProxy.age = 100

// personProxy.gender = true

// console.log(personProxy.name);
// console.log(personProxy.xxx);


// ----------------------------------------------------------------

//Proxy 对比 Object.definedProperty()

// const person = {
//     name : 'zce',
//     age: 20
// }

// const personProxy = new Proxy (person, {
//     deleteProperty (target, property) {
//         console.log('delete', property);
//         delete target[property]
//     }
// })

// delete personProxy.age
// console.log(person);


// ------------------------------------------------------

//使用Proxy监视数组对象

const list = []

const listProxy = new Proxy(list, {
    set (target, property, value) {
        console.log('set', property, value);
        target[property] = value;
        return true     //表示设置成功
    }
})

listProxy.push(100)